package demo.api;

import java.net.Inet4Address;
import java.util.concurrent.TimeoutException;

import org.pcap4j.core.PacketListener;

/**
 * Icmp Echo会话
 * 
 * @author caohj
 * @date 2017年8月5日
 */
public interface IcmpEchoSession extends PacketListener {

	/**
	 * icmp Echo 报文中的identifier字段
	 * 
	 * 相同identifier的icmp echo reply packet由此会话进行处理
	 * 
	 * @return
	 */
	short getIdentifier();

	/**
	 * 不再监听icmp echo报文中此identifier所标识的数据包
	 */
	void close();

	/**
	 * 一直阻塞，直到收到应答、或者超时
	 * 
	 * @param destip
	 * @param timeoutInSecond
	 *            单位秒，小于0一直等待
	 * @return 响应时间（毫秒）
	 * @throws TimeoutException
	 */
	EchoReplyInfo sendEcho(Inet4Address destip, long timeoutInSecond) throws TimeoutException;

	/**
	 * 收到的Echo Reply信息
	 * 
	 * @author caohj
	 * @date 2017年8月5日
	 */
	interface EchoReplyInfo {
		/**
		 * 从发出到收到响应的总时间
		 * 
		 * @return
		 */
		long getDurationInMilliSecond();

		/**
		 * 收到的Echo Reply返回的TTL，
		 * 
		 * @return
		 */
		int getTTL();

		/**
		 * 收到的Echo Reply包的源IP地址
		 * 
		 * @return
		 */
		String getReplySrcAddr();
	}
}
